const express = require('express');
const morgan = require('morgan');
const favicon = require('serve-favicon');
const path = require('path'); // 路径模块
const session = require('express-session')
const userRouter = require('./routes/userRouter')
const jobsRouter = require('./routes/jobsRouter')
const doctorRouter = require('./routes/doctorRouter')
const teamRouter = require('./routes/teamRouter');


const app = express();

// 跨域配置：
app.all('*', function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "*"); //允许跨域访问的名单 *，表示所有
  res.header(
    "Access-Control-Allow-Headers",//向浏览器发送预检请求，询问是否支持跨域的自定义 header 字段
    "Content-Type,Content-Length, Authorization, Accept,X-Requested-With" //允许哪些请求头
  );
  res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");//询问是否支持跨域的请求方法
  res.header("Access-Control-Allow-Credentials", true); // 允许客户端携带验证信息去请求，可以带cookies
  res.header("X-Powered-By", " a.b.1"); //X-Powered-By是网站响应头信息其中的一个，出于安全的考虑，一般会修改或删除掉这个信息。app.disable('x-powered-by');
  //如果你用的node.js express框架，那么X-Powered-By就会显示Express。，这儿把标头修改为" 3.2.1".
  if (req.method == "OPTIONS") res.send(200);//axios这个工具使用option方式做预检。
  /*让options请求快速返回*/
  else next();
});

app.use(morgan('dev')) // 日志

// session的配置： 在request对象里面，就会添加一个session的属性。
app.use(session({
  secret: 'web325',// 编码的密钥， 可以是一个字符串，也可以是一个加密的证书文件。
  name: 'w325', //cookie的名称，也就是会话的名，如果不配置，默认是connect.sid的值。
  resave: false, //强制保存 session 即使它并没有变化,。默认为 true。建议设置成 false。 don't save session if unmodified
  saveUninitialized: true,//强制将未初始化的 session 存储。当新建了一个 session 且未设定属性或值时，它就处于未初始化状态。
  cookie: {
    maxAge: 1000 * 10 //过期的时间
    //设置返回到前端 key 的属性，默认值为{ path: ‘/’, httpOnly: true, secure: false, maxAge: null }。
  },
  rolling: true //在每次请求时强行设置 cookie，这将重置 cookie 过期时间(默认:false)
}))

app.use(express.json({ limit: '1024kb' })) // 处理参数是json格式，不转表单编码格式
app.use(express.urlencoded({ extended: true }))
// 自定义一个中间件,验证登录的权限：
// 每一个中间件都是函数，函数里面的参数，必须有request, responese , next 函数。
// next()表示把数据传递给管道里面的下一个环节处理。
app.use(function (req, res, next) {
  // console.log(req.url);  // /jquery/jquery%203.5.1.js
  // console.log(req.session);
  /* 
  Session {
  cookie: {
    path: '/',
    _expires: 2023-04-24T02:47:23.462Z,
    originalMaxAge: 10000,
    httpOnly: true
  }
}
  */
  // if (req.url == "/" || req.url == "/index.html" || /[.css,.js,.ttf,.jpg,.png,.gif,.map]$/.test(req.url)) { // 登录页面，静态资源都可以直接访问
  //   next()
  // } else {
  //   if (req.session.user === undefined) {
  //     res.redirect("/index.html")  // 未登录时，就重定向到登录页面
  //   } else {
  //     next()
  //   }

  // }
  next()
});

// 配置EJS模板
app.set("views", path.join(__dirname, "views")); // 设置EJS模板文件的路径 ，位置
app.set("view engine", "ejs"); //启用EJS模板引擎。

app.use("/", userRouter)
app.use("/", jobsRouter)
app.use("/", doctorRouter)
app.use("/", teamRouter)
// path.resolve（），拼接路径，返回新的路径
app.use(express.static(path.resolve(__dirname, "public"))) // 使用path时，public前，不要加"/"
app.use(favicon(path.resolve(__dirname, "public/logo.svg")))  // 使用path时，public前，不要加"/"


app.listen(8888, function () {
  console.log('按 ctrl + 单击 打开网站: http://127.0.0.1:8888')
})


// https://www.npmjs.com/ 查看模块的使用
